﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccessLayer.DataInterfaces;

namespace DataAccessLayer
{
    public interface IDALContext
    {
        IKhachHang KhachHang { get; }
        INhanVien NhanVien { get; }
        ILoaiDichVu LoaiDichVu { get; }
        //ILoi Loi { get; }
        INhaCungCap NhaCungCap { get; }
        INhaSanXuat NhaSanXuat { get; }
        //IThietBiKho ThietBiKho { get; }
        IThietBiBaoHanh ThietBiBaoHanh { get; }
        IPhien Phien { get; }
        IPhien_ThietBiBH Phien_ThietBiBH { get; }
        IPhien_NhanVienThucHien Phien_NhanVienThucHien { get; }
        INghiepVu NghiepVu { get; }
        IThietBiBH_NhanVienThucHien ThietBiBH_NhanVienThucHien { get; }
        ILichSuBH LichSuBH { get; }
        INguoiDung NguoiDung { get; }
        IBaoCao BaoCao { get; }
    }

    public class DALContext : IDALContext
    {
        private IKhachHang _khachHang;
        private INhanVien _nhanVien;
        private ILoaiDichVu _loaiDichVu;
        //private ILoi _loi;
        private INhaCungCap _nhaCungCap;
        private INhaSanXuat _nhaSanXuat;
        //private IThietBiKho _thietBiKho;
        private IThietBiBaoHanh _thietBiBaoHanh;
        private IPhien      _phien;
        private IPhien_ThietBiBH _phien_ThietBiBH;
        private IPhien_NhanVienThucHien _phien_NhanVienThucHien;
        private INghiepVu _nghiepVu;
        private IThietBiBH_NhanVienThucHien _thietBiBH_NhanVienThucHien;
        private ILichSuBH _lichSuBH;
        private INguoiDung _nguoiDung;
        private IBaoCao _baoCao;


        public IKhachHang KhachHang
        {
            get
            {
                if (_khachHang == null)
                {
                    _khachHang = new KhachHangDAO();
                }
                return _khachHang;
            }
        }
        public INhanVien NhanVien
        {
            get
            {
                if (_nhanVien == null)
                {
                    _nhanVien = new NhanVienDAO();
                }
                return _nhanVien;
            }
        }
        public ILoaiDichVu LoaiDichVu
        {
            get
            {
                if (_loaiDichVu == null)
                {
                    _loaiDichVu = new LoaiDichVuDAO();
                }
                return _loaiDichVu;
            }
        }
        //public ILoi Loi
        //{
        //    get
        //    {
        //        if (_loi == null)
        //        {
        //            _loi = new LoiDAO();
        //        }
        //        return _loi;
        //    }
        //}
        public INhaCungCap NhaCungCap
        {
            get
            {
                if (_nhaCungCap == null)
                {
                    _nhaCungCap = new NhaCungCapDAO();
                }
                return _nhaCungCap;
            }
        }
        public INhaSanXuat NhaSanXuat
        {
            get
            {
                if (_nhaSanXuat == null)
                {
                    _nhaSanXuat = new NhaSanXuatDAO();
                }
                return _nhaSanXuat;
            }
        }

        public IThietBiBaoHanh ThietBiBaoHanh
        {
            get
            {
                if (_thietBiBaoHanh == null)
                {
                    _thietBiBaoHanh = new ThietBiBaoHanhDAO();
                }
                return _thietBiBaoHanh;
            }
        }
        public IPhien Phien
        {
            get
            {
                if (_phien == null)
                {
                    _phien = new PhienDAO();
                }
                return _phien;
            }
        }
        public IPhien_ThietBiBH Phien_ThietBiBH
        {
            get
            {
                if (_phien_ThietBiBH == null)
                {
                    _phien_ThietBiBH = new Phien_ThietBiBHDAO();
                }
                return _phien_ThietBiBH;
            }
        }
        public IPhien_NhanVienThucHien Phien_NhanVienThucHien
        {
            get
            {
                if (_phien_NhanVienThucHien == null)
                {
                    _phien_NhanVienThucHien = new Phien_NhanVienThucHienDAO();
                }
                return _phien_NhanVienThucHien;
            }
        }

        public INghiepVu NghiepVu
        {
            get
            {
                if (_nghiepVu == null)
                {
                    _nghiepVu = new NghiepVuDAO();
                }
                return _nghiepVu;
            }
        }

        public IThietBiBH_NhanVienThucHien ThietBiBH_NhanVienThucHien
        {
            get
            {
                if (_thietBiBH_NhanVienThucHien == null)
                {
                    _thietBiBH_NhanVienThucHien = new ThietBiBH_NhanVienThucHienDAO();
                }
                return _thietBiBH_NhanVienThucHien;
            }
        }

        public ILichSuBH LichSuBH
        {
            get
            {
                if (_lichSuBH == null)
                {
                    _lichSuBH = new LichSuBHDAO();
                }
                return _lichSuBH;
            }
        }

        public INguoiDung NguoiDung
        {
            get
            {
                if (_nguoiDung == null)
                {
                    _nguoiDung = new NguoiDungDAO();
                }
                return _nguoiDung;
            }
        }

        public IBaoCao BaoCao
        {
            get
            {
                if (_baoCao == null)
                {
                    _baoCao = new BaoCaoDAO();
                }
                return _baoCao;
            }
        }
    }
}
